﻿using System.Collections.Generic;

namespace Bio.Structure
{
    /// <summary>
    /// Implementation of Chain, making up one of the core sets
    /// of data structures for the Structure library in Bio.
    /// </summary>
    public interface IChain
    {
        /// <summary>
        /// Gets the chain identifier.
        /// This is usually a letter, such as 'A.'
        /// A PDB sometimes has several chains such as PDB Code 1BUY chain 'A' and chain 'B'
        /// </summary>
        string Id { get; }

        /// <summary>
        /// Gets the list of groups for this chain.
        /// </summary>
        IList<IGroup> Groups { get; }

        /// <summary>
        /// Gets the dictionary of metadata for this Chain.
        /// There is currently no standard metadata for this object.
        /// </summary>
        IDictionary<string, object> Metadata { get; }

        /// <summary>
        /// Converts the PDB chain to the Bio ISequence
        /// </summary>
        /// <returns>ISequence of the amino acids in this chain.</returns>
        ISequence ToSequence();

        /// <summary>
        /// Retrieves only the standard amino acids for this
        /// </summary>
        /// <returns>List of residue groups.</returns>
        IList<IGroup> GetStandardAminoAcids();

        /// <summary>
        /// Retrieves only the nucleotide groups for this chain.
        /// </summary>
        /// <returns>List of nucleotide groups.</returns>
        IList<IGroup> GetNucleotides();
    }
}